import type { RequestEvent } from "@sveltejs/kit"; const DEFAULT_ROOM = "default"; export async function maybeHandleChatWebSocket({ event, params, }: { event: RequestEvent; params: Record; routePathname: string; }) { const env = event.platform?.env as Env | undefined; if (!env) { return null; } const room = sanitizeRoom(params.room ?? null); const id = env.DO_CHAT.idFromName(room); const stub = env.DO_CHAT.get(id); const forwardUrl = new URL( `https://chat-do/ws-chat/${encodeURIComponent(room)}`, ); const requestUrl = event.url; const name = requestUrl.searchParams.get("name"); if (name) { forwardUrl.searchParams.set("name", name); } return stub.fetch(new Request(forwardUrl, event.request)); } function sanitizeRoom(value: string | null) { const room = value ?.trim() .toLowerCase() .replace(/[^a-z0-9-_]/g, "-") .slice(0, 48); return room || DEFAULT_ROOM; }